#include <iostream>
#include <stdlib.h>
#include<string.h>
#include<math.h>
using namespace std;
//3.运算符重载
class Date
{
public:

    Date(int year=2002, int month=11, int day=4 )//构造
    {
        _year=year;
        _month=month;
        _day=day;
    }

    bool operator==(const Date&d1 )//==重载
    {
        return _year==d1._year&&_month==d1._month&&_day==d1._day;
    }

    bool operator<(const Date&d1 )//<重载
    {
        if(_year<d1._year)
        {
            return true;
        }
        else if(_year==d1._year&&_month<d1._month)//少比较
        {
            return true;
        }
        else if(_year==d1._year&& _year==d1._month &&_day<d1._day)//少比较
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    Date& operator=(const Date& d1)//=
    {
       _year=d1._year;
       _month=d1._month;
       _day=d1._day;
       return *this;
       //返回是吧这快地址给存起来，那么返回类就会调用拷贝构造
       //这里用引用提高效率，这里引用做返值的条件是数据不会被销毁
    }

    int GetMonthDay(int year, int month);

    //!= > >= <=
    bool operator!=(const Date&d1 );
    bool operator>(const Date&d1 );
    bool operator>=(const Date&d1 );
    bool operator<=(const Date&d1 );

    //+ - += -=日期
    Date& operator+=(int day);
    Date operator+(int day);
    Date operator-(int day);
    Date& operator-=(int day);


    // ++ --前置   后置++ --
    Date& operator++();
    Date operator++(int);
    Date operator--(int);
    Date& operator--();




    Date(const Date& d1)
    {
        _year=d1._year;
        _month=d1._month;
        _day=d1._day;
    }




//    ~Date()//析构
//    {
//        cout<<"This is ~Date"<<endl;
//    }

    void Print()
    {
        cout<<_year<<"/"<<_month<<"/"<<_day<<endl;
    }

private:
    //这个是构造函数的缺省参数
    int _year=0;
    int _month=1;
    int _day=1;
};
